package com.gutai.admin.dao;

import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.persistence.EntityManager;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;

/**
 * 
 * 
 * 
 * <pre>
 * HISTORY
 * ****************************************************************************
 *  ID    DATE            PERSON            REASON
 *  1     2019年3月6日         LA.01367604           Create
 * ****************************************************************************
 * </pre>
 * 
 * @author LA.01367604
 * @version 1.0
 */
public interface CustomJpaRepository<T> {

    public EntityManager getEntityManager();
    /**
     * 根据条件分页查询
     * 
     * @param clazz
     * @param fieldsMap
     * @param pageIdx
     * @param pageSize
     * @return
     * @author la.01367604-2019年1月29日
     * @throws Exception 
     */
    public Page<T> queryPage(Map<String, Object> fieldsMap, int pageIdx, int pageSize) throws Exception;

    /**
     * 分页查询，返回指定列
     * 
     * @param clazz
     * @param feilds
     * @param pageIdx
     * @param pageSize
     * @return
     * @author la.01367604-2019年1月29日
     */
    public Page<T> queryPageWithSelect(Set<String> feilds, int pageIdx, int pageSize);

    public List<T> queryListWithConds(Map<String, Object> fieldsMap) throws Exception;

    public Page<T> queryPage(int pageIdx, int pageSize);

    public Page<T> queryPage(int pageIdx, int pageSize, Sort sort);

    public Page<T> queryPageWithSpec(Specification<T> spec, int pageIdx, int pageSize);

    public Page<T> queryPageWithSpec(Specification<T> spec, int pageIdx, int pageSize, Sort sort);

    public List<T> queryWithSql(String sql);

    public T findById(int id);






    // public void delete(Map<String, Object> fieldsMap);

}
